package test;

import org.junit.Test;

import tenis.Jugador;
import tenis.Partido;
import tennis.*;

import exepciones.TenisExepcion;

import junit.framework.TestCase;

public class JugableTestGustavoI extends BaseTest {

	@Test
	// Con hombre y mujer
	public void testIniciarPartido1() {
		IJugador jugador1 = vestuario.getJugadorMasculino();
		IJugador jugador2 = vestuario.getJugadorFemenino();
		IJugable partido = new Partido();
		try {
			partido.iniciarPartido(jugador1, jugador2);
			jugador1.setNombre("jugador 1");
			jugador1.setNombre("jugador 2");
			assertTrue("El sexo de los jugadores no se controlo", false);
		}catch(TenisExepcion ex){
			assertTrue("Deberia controlarse que el sexo de ambos jugadores debe ser igual", true);
			System.out.println(ex.getMessage());
		}
	}

	// Con dos hombres
	public void testIniciarPartido2() {
		IJugador jugador1 = vestuario.getJugadorMasculino();
		IJugador jugador2 = vestuario.getJugadorMasculino();
		IJugable partido = new Partido();
		try{
			partido.iniciarPartido(jugador1, jugador2);
			jugador1.setNombre("jugador 1");
			jugador1.setNombre("jugador 2");
			assertTrue(true);
		}catch(TenisExepcion ex){
			assertTrue(false);
			System.out.println(ex.getMessage());
		}
	}

	// sumo 1 a jugador1
	public void testSumarPunto1() {
		IJugador jugador1 = vestuario.getJugadorMasculino();
		IJugador jugador2 = vestuario.getJugadorMasculino();
		IJugable partido = new Partido();
		try{
		partido.iniciarPartido(jugador1, jugador2);
		jugador1.setNombre("jugador 1");
		jugador1.setNombre("jugador 2");
		partido.sumarPunto(jugador1); // 15-0

		String resultado = partido.resultado();
		assertEquals("el resultado esperado no corresponde: 15-0;0-0;0-0", "15-0;0-0;0-0", resultado);
		}catch(TenisExepcion ex){
			System.out.println(ex.getMessage());
		}
	}

	// sumo 1 jugador1 y 3 a jugador2
	public void testSumarPunto2() {
		IJugador jugador1 = vestuario.getJugadorMasculino();
		IJugador jugador2 = vestuario.getJugadorMasculino();
		IJugable partido = new Partido();
		try{
		partido.iniciarPartido(jugador1, jugador2);
		jugador1.setNombre("jugador 1");
		jugador1.setNombre("jugador 2");
		partido.sumarPunto(jugador1);	//15-0
		partido.sumarPunto(jugador2);	//15-15		
		partido.sumarPunto(jugador2);	//15-30
		partido.sumarPunto(jugador2);	//15-40
		
		String resultado = partido.resultado();
		assertEquals("15-40;0-0;0-0", resultado);
		}catch(TenisExepcion ex){
			System.out.println(ex.getMessage());
		}
	}

	// sumo
	public void testSumarPunto3() {
		IJugador jugador1 = vestuario.getJugadorMasculino();
		IJugador jugador2 = vestuario.getJugadorMasculino();
		IJugable partido = new Partido();
		try{
		partido.iniciarPartido(jugador1, jugador2);
		jugador1.setNombre("jugador 1");
		jugador1.setNombre("jugador 2");
		partido.sumarPunto(jugador1); // 15-0
		partido.sumarPunto(jugador1); // 30-0
		partido.sumarPunto(jugador1); // 40-0
		partido.sumarPunto(jugador2); // 40-15
		partido.sumarPunto(jugador2); // 40-30
		partido.sumarPunto(jugador2); // 40-40
		partido.sumarPunto(jugador1); // ADV-40

		String resultado = partido.resultado();
		assertEquals("el resultado esperado no corresponde: no se verifica la ventaja", "ADV-40;0-0;0-0", resultado);

		partido.sumarPunto(jugador2); // 40-40

		String resultado2 = partido.resultado();
		assertEquals("40-40;0-0;0-0", resultado2);
		}catch(TenisExepcion ex){
			System.out.println(ex.getMessage());
		}
	}

	// sumo
	public void testSumarPunto4() {
		IJugador jugador1 = vestuario.getJugadorMasculino();
		IJugador jugador2 = vestuario.getJugadorMasculino();
		IJugable partido = new Partido();
		try{
		partido.iniciarPartido(jugador1, jugador2);
		jugador1.setNombre("jugador 1");
		jugador1.setNombre("jugador 2");
		partido.sumarPunto(jugador1); // 15-0
		partido.sumarPunto(jugador2); // 15-15
		partido.sumarPunto(jugador2); // 15-30
		partido.sumarPunto(jugador2); // 15-40
		partido.sumarPunto(jugador1); // 30-40
		partido.sumarPunto(jugador1); // 40-40
		partido.sumarPunto(jugador1); // ADV-40
		partido.sumarPunto(jugador1); // 0-0;1-0
		partido.sumarPunto(jugador1); // 15-0;1-0

		String resultado = partido.resultado();
		assertEquals("15-0;1-0;0-0", resultado);
		}catch(TenisExepcion ex){
			System.out.println(ex.getMessage());
		}
	}

	// sumo
	public void testSumarPunto5() {
		IJugador jugador1 = vestuario.getJugadorMasculino();
		IJugador jugador2 = vestuario.getJugadorMasculino();
		IJugable partido = new Partido();
		try{
		partido.iniciarPartido(jugador1, jugador2);
		jugador1.setNombre("jugador 1");
		jugador1.setNombre("jugador 2");
		partido.sumarPunto(jugador1); // 15-0
		partido.sumarPunto(jugador1); // 30-0
		partido.sumarPunto(jugador1); // 40-0
		partido.sumarPunto(jugador1); // 0-0;1-0
		partido.sumarPunto(jugador1); // 15-0
		partido.sumarPunto(jugador1); // 30-0
		partido.sumarPunto(jugador1); // 40-0
		partido.sumarPunto(jugador1); // 0-0;2-0
		partido.sumarPunto(jugador1); // 15-0
		partido.sumarPunto(jugador1); // 30-0
		partido.sumarPunto(jugador1); // 40-0
		partido.sumarPunto(jugador1); // 0-0;3-0
		partido.sumarPunto(jugador1); // 15-0
		partido.sumarPunto(jugador1); // 30-0
		partido.sumarPunto(jugador1); // 40-0
		partido.sumarPunto(jugador1); // 0-0;4-0
		partido.sumarPunto(jugador1); // 15-0
		partido.sumarPunto(jugador1); // 30-0
		partido.sumarPunto(jugador1); // 40-0
		partido.sumarPunto(jugador1); // 0-0;5-0
		partido.sumarPunto(jugador1); // 15-0
		partido.sumarPunto(jugador1); // 30-0
		partido.sumarPunto(jugador1); // 40-0
		partido.sumarPunto(jugador1); // 0-0;0-0;1-0

		String resultado = partido.resultado();
		assertEquals("0-0;0-0;1-0", resultado);
		}catch(TenisExepcion ex){
			System.out.println(ex.getMessage());
		}
	}
}
